﻿#pragma once

#include <QObject>
#include<qurl.h>
#include<qnetworkrequest.h>
#include<QNetworkAccessManager>
#include<qstring.h>

class MusicPlatform: public QObject
{
	Q_OBJECT
public:
    //explicit MusicPlatform(QObject* parent = nullptr);
    MusicPlatform(const QString& baseUrl = "localhost:3000" ,QObject * parent = nullptr);
    // 强制子类实现的平台标识，用于动态识别平台类型
    virtual QString platformId() const = 0;
    // 必须实现的核心功能
    virtual void search(const QString& keyword) = 0;
    virtual void play(const QString& songId) = 0;
signals:
    // 当平台完成搜索请求并解析成功时触发	
    void searchFinished(const QJsonArray& results);
    //获取到有效播放地址时触发
    void playUrlReady(const QUrl& url);
    //出现网络错误或业务逻辑错误时触发
    void errorOccurred(int code, const QString& message);

protected:
    QNetworkAccessManager* m_network;
    QString m_baseUrl;
};

